Оглавление

  • 1   Исследование рынка общественного питания Москвы
    • 1.1   Загрузка данных и изучение общей информации
  • 2   Предобработка данных
  • 3   Анализ данных
    • 3.1   Исследуем количество объектов общественного питания по категориям.
    • 3.2   Исследуем количество посадочных мест в местах по категориям: рестораны, кофейни, пиццерии, бары и так далее.
    • 3.3   Соотношение сетевых и несетевых заведений в датасете.
    • 3.4   Топ-15 популярных сетей в Москве
    • 3.5   Распределение заведений по округам
    • 3.6   Распределение средних рейтингов по категориям заведений.
    • 3.7   Фоновая картограмма (хороплет) со средним рейтингом заведений каждого округа.
    • 3.8   Отобразим все заведения датасета на карте с помощью кластеров средствами библиотеки folium.
    • 3.9   Топ-15 улиц по количеству заведений.
    • 3.10   Улицы, на которых находится только один объект общепита.
    • 3.11   Построим ценовой индикатор района (по среднему чеку).
  • 4   Детализация исследования: открытие кофейни
    • 4.1   Сколько всего кофеен в датасете? Каковы особенности их расположения?
    • 4.2   Есть ли круглосуточные кофейни?
    • 4.3   Какие у кофеен рейтинги? Как они распределяются по районам?
    • 4.4   На какую стоимость чашки капучино стоит ориентироваться при открытии и почему?

Исследование рынка общественного питания Москвы

Загрузка данных и изучение общей информации

Загрузим данные о заведениях общественного питания Москвы. Изучим общую информацию о датасете.

Для чтения файла импортируем библиотеку pandas, также нам понадобятся библиотеки numpy, matplotlib.pyplot, folium, seaborn

In [1]:
!pip install folium
from folium import Marker, Map, Choropleth
# импортируем кластер
from folium.plugins import MarkerCluster
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import folium as fl
import plotly.express as px 
import seaborn as sns
from plotly import graph_objs as go
Requirement already satisfied: folium in c:\users\margarita\anaconda3\lib\site-packages (0.14.0)
Requirement already satisfied: requests in c:\users\margarita\anaconda3\lib\site-packages (from folium) (2.27.1)
Requirement already satisfied: numpy in c:\users\margarita\anaconda3\lib\site-packages (from folium) (1.21.5)
Requirement already satisfied: branca>=0.6.0 in c:\users\margarita\anaconda3\lib\site-packages (from folium) (0.6.0)
Requirement already satisfied: jinja2>=2.9 in c:\users\margarita\anaconda3\lib\site-packages (from folium) (2.11.3)
Requirement already satisfied: MarkupSafe>=0.23 in c:\users\margarita\anaconda3\lib\site-packages (from jinja2>=2.9->folium) (2.0.1)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\margarita\anaconda3\lib\site-packages (from requests->folium) (2021.10.8)
Requirement already satisfied: charset-normalizer~=2.0.0 in c:\users\margarita\anaconda3\lib\site-packages (from requests->folium) (2.0.4)
Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\margarita\anaconda3\lib\site-packages (from requests->folium) (1.26.9)
Requirement already satisfied: idna<4,>=2.5 in c:\users\margarita\anaconda3\lib\site-packages (from requests->folium) (3.3)
In [2]:
moscow_places = pd.read_csv('moscow_places.csv')
In [3]:
# настроим вывод колонок на экран
pd.options.display.float_format = '{: .2f}'.format
pd.options.display.max_colwidth = 150
In [4]:
# describe_column, функция, которая будет выдавать описание данных , количество пропусков,уникальные значения для значений типа 'object
def describe_column(column):
    print('Тип данных:', column.dtypes)
    print('Количество пропусков:', column.isna().sum())
    if column.dtypes == 'object':
        print('Уникальные значения столбца', column.sort_values().unique())
    print('Описание данных:')
    print(column.describe())
    print()
    print('*'*50)
In [5]:
# функция для просмотра файлов 
def description_files(df):
    
    print(f'Изучим информацию')
    print()
    print('Посмотрим первые 5 строк')
    display(df.head(5))
    print()
    print('*'*50)
    print('Выведем информацию о типах данных')
    df.info()
    print()
    print('*'*50)
    print('Проверим пропуски')
    display(df.isna().sum())
    print('Пройдемся по значениям каждого столбца')
    print()
    print('*'*50)
    for column in df:
        columnSeriesObj = df[column]
        print(f"столбец: {column}")
        print()
        describe_column(df[column])
        print() 
        
    print('Проверим дубликаты')
    if df.duplicated().sum() ==0:
        print('Явных дубликатов нет')
    else:
        df.drop_duplicates()
        print('Явные дубликаты удалены')
In [6]:
description_files(moscow_places)
Изучим информацию

Посмотрим первые 5 строк
name category address district hours lat lng rating price avg_bill middle_avg_bill middle_coffee_cup chain seats
0 WoWфли кафе Москва, улица Дыбенко, 7/1 Северный административный округ ежедневно, 10:00–22:00 55.88 37.48 5.00 NaN NaN NaN NaN 0 NaN
1 Четыре комнаты ресторан Москва, улица Дыбенко, 36, корп. 1 Северный административный округ ежедневно, 10:00–22:00 55.88 37.48 4.50 выше среднего Средний счёт:1500–1600 ₽ 1550.00 NaN 0 4.00
2 Хазри кафе Москва, Клязьминская улица, 15 Северный административный округ пн-чт 11:00–02:00; пт,сб 11:00–05:00; вс 11:00–02:00 55.89 37.53 4.60 средние Средний счёт:от 1000 ₽ 1000.00 NaN 0 45.00
3 Dormouse Coffee Shop кофейня Москва, улица Маршала Федоренко, 12 Северный административный округ ежедневно, 09:00–22:00 55.88 37.49 5.00 NaN Цена чашки капучино:155–185 ₽ NaN 170.00 0 NaN
4 Иль Марко пиццерия Москва, Правобережная улица, 1Б Северный административный округ ежедневно, 10:00–22:00 55.88 37.45 5.00 средние Средний счёт:400–600 ₽ 500.00 NaN 1 148.00
**************************************************
Выведем информацию о типах данных
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8406 entries, 0 to 8405
Data columns (total 14 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   name               8406 non-null   object 
 1   category           8406 non-null   object 
 2   address            8406 non-null   object 
 3   district           8406 non-null   object 
 4   hours              7870 non-null   object 
 5   lat                8406 non-null   float64
 6   lng                8406 non-null   float64
 7   rating             8406 non-null   float64
 8   price              3315 non-null   object 
 9   avg_bill           3816 non-null   object 
 10  middle_avg_bill    3149 non-null   float64
 11  middle_coffee_cup  535 non-null    float64
 12  chain              8406 non-null   int64  
 13  seats              4795 non-null   float64
dtypes: float64(6), int64(1), object(7)
memory usage: 919.5+ KB

**************************************************
Проверим пропуски
name                    0
category                0
address                 0
district                0
hours                 536
lat                     0
lng                     0
rating                  0
price                5091
avg_bill             4590
middle_avg_bill      5257
middle_coffee_cup    7871
chain                   0
seats                3611
dtype: int64
Пройдемся по значениям каждого столбца

**************************************************
столбец: name

Тип данных: object
Количество пропусков: 0
Уникальные значения столбца ['#КешбэкКафе' '+39 Pizzeria Mozzarella bar' '1 Этаж' ... 'Ясно' 'Яуза'
 'ночной Баку']
Описание данных:
count     8406
unique    5614
top       Кафе
freq       189
Name: name, dtype: object

**************************************************

столбец: category

Тип данных: object
Количество пропусков: 0
Уникальные значения столбца ['бар,паб' 'булочная' 'быстрое питание' 'кафе' 'кофейня' 'пиццерия'
 'ресторан' 'столовая']
Описание данных:
count     8406
unique       8
top       кафе
freq      2378
Name: category, dtype: object

**************************************************

столбец: address

Тип данных: object
Количество пропусков: 0
Уникальные значения столбца ['Москва, 1-й Автозаводский проезд, 5'
 'Москва, 1-й Балтийский переулок, 3/25'
 'Москва, 1-й Варшавский проезд, 1Ас9' ...
 'Москва, шоссе Энтузиастов, 86А, корп. 3' 'Москва, шоссе Энтузиастов, с2'
 'Москва, № 7']
Описание данных:
count                                  8406
unique                                 5753
top       Москва, проспект Вернадского, 86В
freq                                     28
Name: address, dtype: object

**************************************************

столбец: district

Тип данных: object
Количество пропусков: 0
Уникальные значения столбца ['Восточный административный округ' 'Западный административный округ'
 'Северный административный округ'
 'Северо-Восточный административный округ'
 'Северо-Западный административный округ'
 'Центральный административный округ'
 'Юго-Восточный административный округ'
 'Юго-Западный административный округ' 'Южный административный округ']
Описание данных:
count                                   8406
unique                                     9
top       Центральный административный округ
freq                                    2242
Name: district, dtype: object

**************************************************

столбец: hours

Тип данных: object
Количество пропусков: 536
Уникальные значения столбца ['Нет информации'
 'вт 08:30–17:00; ср,чт 12:00–20:30; пт 08:30–17:00; сб 09:00–16:30'
 'вт 13:00–21:00; ср 11:00–20:00; чт 13:00–21:00; пт-вс 11:00–20:00' ...
 'чт круглосуточно, перерыв 10:00–20:00; сб круглосуточно'
 'чт-вс 20:00–06:00' nan]
Описание данных:
count                       7870
unique                      1307
top       ежедневно, 10:00–22:00
freq                         759
Name: hours, dtype: object

**************************************************

столбец: lat

Тип данных: float64
Количество пропусков: 0
Описание данных:
count    8406.00
mean       55.75
std         0.07
min        55.57
25%        55.71
50%        55.75
75%        55.80
max        55.93
Name: lat, dtype: float64

**************************************************

столбец: lng

Тип данных: float64
Количество пропусков: 0
Описание данных:
count    8406.00
mean       37.61
std         0.10
min        37.36
25%        37.54
50%        37.61
75%        37.66
max        37.87
Name: lng, dtype: float64

**************************************************

столбец: rating

Тип данных: float64
Количество пропусков: 0
Описание данных:
count    8406.00
mean        4.23
std         0.47
min         1.00
25%         4.10
50%         4.30
75%         4.40
max         5.00
Name: rating, dtype: float64

**************************************************

столбец: price

Тип данных: object
Количество пропусков: 5091
Уникальные значения столбца ['высокие' 'выше среднего' 'низкие' 'средние' nan]
Описание данных:
count        3315
unique          4
top       средние
freq         2117
Name: price, dtype: object

**************************************************

столбец: avg_bill

Тип данных: object
Количество пропусков: 4590
Уникальные значения столбца ['Средний счёт:100 ₽' 'Средний счёт:1000 ₽' 'Средний счёт:1000–10000 ₽'
 'Средний счёт:1000–1100 ₽' 'Средний счёт:1000–1200 ₽'
 'Средний счёт:1000–1300 ₽' 'Средний счёт:1000–1350 ₽'
 'Средний счёт:1000–1400 ₽' 'Средний счёт:1000–1500 ₽'
 'Средний счёт:1000–1600 ₽' 'Средний счёт:1000–1700 ₽'
 'Средний счёт:1000–2000 ₽' 'Средний счёт:1000–2500 ₽'
 'Средний счёт:1000–3000 ₽' 'Средний счёт:1000–5000 ₽'
 'Средний счёт:100–1000 ₽' 'Средний счёт:100–160 ₽'
 'Средний счёт:100–180 ₽' 'Средний счёт:100–200 ₽'
 'Средний счёт:100–2000 ₽' 'Средний счёт:100–270 ₽'
 'Средний счёт:100–300 ₽' 'Средний счёт:100–330 ₽'
 'Средний счёт:100–350 ₽' 'Средний счёт:100–400 ₽'
 'Средний счёт:100–423 ₽' 'Средний счёт:100–500 ₽'
 'Средний счёт:100–599 ₽' 'Средний счёт:100–700 ₽'
 'Средний счёт:1100–1500 ₽' 'Средний счёт:110–200 ₽' 'Средний счёт:120 ₽'
 'Средний счёт:1200 ₽' 'Средний счёт:1200–1300 ₽'
 'Средний счёт:1200–1500 ₽' 'Средний счёт:1200–1600 ₽'
 'Средний счёт:1200–1700 ₽' 'Средний счёт:1200–1800 ₽'
 'Средний счёт:1200–1900 ₽' 'Средний счёт:1200–2000 ₽'
 'Средний счёт:1200–2500 ₽' 'Средний счёт:1200–3000 ₽'
 'Средний счёт:120–130 ₽' 'Средний счёт:120–150 ₽'
 'Средний счёт:120–160 ₽' 'Средний счёт:120–370 ₽'
 'Средний счёт:120–470 ₽' 'Средний счёт:1300 ₽' 'Средний счёт:1300–1500 ₽'
 'Средний счёт:1300–1600 ₽' 'Средний счёт:1300–1700 ₽'
 'Средний счёт:1300–1800 ₽' 'Средний счёт:1300–2000 ₽'
 'Средний счёт:1300–2100 ₽' 'Средний счёт:1300–2500 ₽'
 'Средний счёт:130–140 ₽' 'Средний счёт:130–200 ₽'
 'Средний счёт:130–350 ₽' 'Средний счёт:130–700 ₽' 'Средний счёт:1330 ₽'
 'Средний счёт:1400 ₽' 'Средний счёт:1400–1500 ₽'
 'Средний счёт:1400–1600 ₽' 'Средний счёт:1400–1700 ₽'
 'Средний счёт:1400–1800 ₽' 'Средний счёт:140–142 ₽'
 'Средний счёт:140–160 ₽' 'Средний счёт:140–250 ₽'
 'Средний счёт:140–350 ₽' 'Средний счёт:149–249 ₽' 'Средний счёт:150 ₽'
 'Средний счёт:1500 ₽' 'Средний счёт:1500–1600 ₽'
 'Средний счёт:1500–1700 ₽' 'Средний счёт:1500–1800 ₽'
 'Средний счёт:1500–1880 ₽' 'Средний счёт:1500–1900 ₽'
 'Средний счёт:1500–2000 ₽' 'Средний счёт:1500–2500 ₽'
 'Средний счёт:1500–3000 ₽' 'Средний счёт:1500–3500 ₽'
 'Средний счёт:1500–4000 ₽' 'Средний счёт:1500–5000 ₽'
 'Средний счёт:150–1000 ₽' 'Средний счёт:150–180 ₽'
 'Средний счёт:150–200 ₽' 'Средний счёт:150–220 ₽'
 'Средний счёт:150–250 ₽' 'Средний счёт:150–260 ₽'
 'Средний счёт:150–300 ₽' 'Средний счёт:150–350 ₽'
 'Средний счёт:150–400 ₽' 'Средний счёт:150–450 ₽'
 'Средний счёт:150–500 ₽' 'Средний счёт:150–599 ₽'
 'Средний счёт:150–600 ₽' 'Средний счёт:150–650 ₽'
 'Средний счёт:150–700 ₽' 'Средний счёт:1600 ₽' 'Средний счёт:160–200 ₽'
 'Средний счёт:160–240 ₽' 'Средний счёт:160–250 ₽'
 'Средний счёт:160–500 ₽' 'Средний счёт:170 ₽' 'Средний счёт:1700 ₽'
 'Средний счёт:1700–1900 ₽' 'Средний счёт:1700–2500 ₽'
 'Средний счёт:170–220 ₽' 'Средний счёт:170–230 ₽'
 'Средний счёт:170–280 ₽' 'Средний счёт:170–300 ₽'
 'Средний счёт:170–350 ₽' 'Средний счёт:170–490 ₽'
 'Средний счёт:170–700 ₽' 'Средний счёт:180 ₽' 'Средний счёт:1800 ₽'
 'Средний счёт:1800–2000 ₽' 'Средний счёт:1800–2500 ₽'
 'Средний счёт:180–1170 ₽' 'Средний счёт:180–220 ₽'
 'Средний счёт:180–280 ₽' 'Средний счёт:180–350 ₽' 'Средний счёт:190 ₽'
 'Средний счёт:1900 ₽' 'Средний счёт:1900–2500 ₽' 'Средний счёт:190–260 ₽'
 'Средний счёт:190–280 ₽' 'Средний счёт:190–290 ₽'
 'Средний счёт:190–350 ₽' 'Средний счёт:195–235 ₽' 'Средний счёт:199 ₽'
 'Средний счёт:199–450 ₽' 'Средний счёт:1–2000 ₽' 'Средний счёт:200 ₽'
 'Средний счёт:2000 ₽' 'Средний счёт:20000–50000 ₽'
 'Средний счёт:2000–2500 ₽' 'Средний счёт:2000–3000 ₽'
 'Средний счёт:2000–3500 ₽' 'Средний счёт:2000–4000 ₽'
 'Средний счёт:2000–5000 ₽' 'Средний счёт:200–1000 ₽'
 'Средний счёт:200–220 ₽' 'Средний счёт:200–250 ₽'
 'Средний счёт:200–270 ₽' 'Средний счёт:200–280 ₽'
 'Средний счёт:200–300 ₽' 'Средний счёт:200–350 ₽'
 'Средний счёт:200–360 ₽' 'Средний счёт:200–400 ₽'
 'Средний счёт:200–450 ₽' 'Средний счёт:200–500 ₽'
 'Средний счёт:200–600 ₽' 'Средний счёт:200–700 ₽'
 'Средний счёт:205–500 ₽' 'Средний счёт:2100 ₽' 'Средний счёт:220 ₽'
 'Средний счёт:2200 ₽' 'Средний счёт:220–270 ₽' 'Средний счёт:220–300 ₽'
 'Средний счёт:220–350 ₽' 'Средний счёт:220–500 ₽' 'Средний счёт:229 ₽'
 'Средний счёт:2300 ₽' 'Средний счёт:230–250 ₽' 'Средний счёт:230–280 ₽'
 'Средний счёт:230–300 ₽' 'Средний счёт:230–350 ₽'
 'Средний счёт:230–500 ₽' 'Средний счёт:230–650 ₽'
 'Средний счёт:232–387 ₽' 'Средний счёт:240 ₽' 'Средний счёт:2400 ₽'
 'Средний счёт:240–350 ₽' 'Средний счёт:240–360 ₽'
 'Средний счёт:240–500 ₽' 'Средний счёт:250 ₽' 'Средний счёт:2500 ₽'
 'Средний счёт:2500–3000 ₽' 'Средний счёт:2500–3500 ₽'
 'Средний счёт:2500–4000 ₽' 'Средний счёт:2500–4500 ₽'
 'Средний счёт:2500–5000 ₽' 'Средний счёт:250–1000 ₽'
 'Средний счёт:250–270 ₽' 'Средний счёт:250–280 ₽'
 'Средний счёт:250–300 ₽' 'Средний счёт:250–320 ₽'
 'Средний счёт:250–350 ₽' 'Средний счёт:250–380 ₽'
 'Средний счёт:250–400 ₽' 'Средний счёт:250–430 ₽'
 'Средний счёт:250–450 ₽' 'Средний счёт:250–480 ₽'
 'Средний счёт:250–500 ₽' 'Средний счёт:250–550 ₽'
 'Средний счёт:250–600 ₽' 'Средний счёт:250–700 ₽'
 'Средний счёт:250–800 ₽' 'Средний счёт:260 ₽' 'Средний счёт:2600 ₽'
 'Средний счёт:260–1000 ₽' 'Средний счёт:260–280 ₽'
 'Средний счёт:260–290 ₽' 'Средний счёт:260–300 ₽'
 'Средний счёт:260–400 ₽' 'Средний счёт:266 ₽' 'Средний счёт:269 ₽'
 'Средний счёт:270 ₽' 'Средний счёт:270–300 ₽' 'Средний счёт:270–350 ₽'
 'Средний счёт:270–400 ₽' 'Средний счёт:270–450 ₽' 'Средний счёт:275 ₽'
 'Средний счёт:275–500 ₽' 'Средний счёт:280 ₽' 'Средний счёт:280–290 ₽'
 'Средний счёт:280–320 ₽' 'Средний счёт:280–330 ₽'
 'Средний счёт:280–350 ₽' 'Средний счёт:280–360 ₽'
 'Средний счёт:280–400 ₽' 'Средний счёт:280–420 ₽'
 'Средний счёт:280–450 ₽' 'Средний счёт:285 ₽' 'Средний счёт:290 ₽'
 'Средний счёт:2900 ₽' 'Средний счёт:290–490 ₽' 'Средний счёт:290–500 ₽'
 'Средний счёт:291 ₽' 'Средний счёт:298 ₽' 'Средний счёт:299 ₽'
 'Средний счёт:299–400 ₽' 'Средний счёт:299–450 ₽' 'Средний счёт:300 ₽'
 'Средний счёт:3000 ₽' 'Средний счёт:3000–3500 ₽'
 'Средний счёт:3000–4000 ₽' 'Средний счёт:3000–5000 ₽'
 'Средний счёт:300–1000 ₽' 'Средний счёт:300–1500 ₽'
 'Средний счёт:300–1600 ₽' 'Средний счёт:300–2000 ₽'
 'Средний счёт:300–350 ₽' 'Средний счёт:300–400 ₽'
 'Средний счёт:300–420 ₽' 'Средний счёт:300–430 ₽'
 'Средний счёт:300–450 ₽' 'Средний счёт:300–500 ₽'
 'Средний счёт:300–550 ₽' 'Средний счёт:300–600 ₽'
 'Средний счёт:300–650 ₽' 'Средний счёт:300–700 ₽'
 'Средний счёт:300–800 ₽' 'Средний счёт:301 ₽' 'Средний счёт:304 ₽'
 'Средний счёт:30–300 ₽' 'Средний счёт:310–370 ₽' 'Средний счёт:313 ₽'
 'Средний счёт:317 ₽' 'Средний счёт:320 ₽' 'Средний счёт:320–1500 ₽'
 'Средний счёт:320–350 ₽' 'Средний счёт:320–480 ₽' 'Средний счёт:321 ₽'
 'Средний счёт:324 ₽' 'Средний счёт:328 ₽' 'Средний счёт:330 ₽'
 'Средний счёт:330–400 ₽' 'Средний счёт:330–990 ₽' 'Средний счёт:339 ₽'
 'Средний счёт:340 ₽' 'Средний счёт:340–550 ₽' 'Средний счёт:343 ₽'
 'Средний счёт:344 ₽' 'Средний счёт:349 ₽' 'Средний счёт:350 ₽'
 'Средний счёт:3500 ₽' 'Средний счёт:3500–4000 ₽'
 'Средний счёт:3500–5000 ₽' 'Средний счёт:350–1000 ₽'
 'Средний счёт:350–1500 ₽' 'Средний счёт:350–2000 ₽'
 'Средний счёт:350–2400 ₽' 'Средний счёт:350–400 ₽'
 'Средний счёт:350–420 ₽' 'Средний счёт:350–450 ₽'
 'Средний счёт:350–500 ₽' 'Средний счёт:350–550 ₽'
 'Средний счёт:350–600 ₽' 'Средний счёт:350–650 ₽'
 'Средний счёт:350–700 ₽' 'Средний счёт:350–800 ₽' 'Средний счёт:355 ₽'
 'Средний счёт:35–100 ₽' 'Средний счёт:35–180 ₽' 'Средний счёт:35–300 ₽'
 'Средний счёт:360 ₽' 'Средний счёт:360–500 ₽' 'Средний счёт:360–540 ₽'
 'Средний счёт:362 ₽' 'Средний счёт:363 ₽' 'Средний счёт:366 ₽'
 'Средний счёт:370 ₽' 'Средний счёт:372 ₽' 'Средний счёт:373 ₽'
 'Средний счёт:375 ₽' 'Средний счёт:380–1010 ₽' 'Средний счёт:380–400 ₽'
 'Средний счёт:380–500 ₽' 'Средний счёт:380–600 ₽' 'Средний счёт:382 ₽'
 'Средний счёт:383 ₽' 'Средний счёт:385 ₽' 'Средний счёт:385–580 ₽'
 'Средний счёт:390–1000 ₽' 'Средний счёт:390–460 ₽'
 'Средний счёт:390–500 ₽' 'Средний счёт:390–660 ₽'
 'Средний счёт:390–700 ₽' 'Средний счёт:391 ₽' 'Средний счёт:392 ₽'
 'Средний счёт:400 ₽' 'Средний счёт:4000 ₽' 'Средний счёт:4000–5000 ₽'
 'Средний счёт:400–1000 ₽' 'Средний счёт:400–1200 ₽'
 'Средний счёт:400–1500 ₽' 'Средний счёт:400–2500 ₽'
 'Средний счёт:400–450 ₽' 'Средний счёт:400–500 ₽'
 'Средний счёт:400–550 ₽' 'Средний счёт:400–600 ₽'
 'Средний счёт:400–6000 ₽' 'Средний счёт:400–650 ₽'
 'Средний счёт:400–700 ₽' 'Средний счёт:400–800 ₽'
 'Средний счёт:400–900 ₽' 'Средний счёт:402 ₽' 'Средний счёт:404 ₽'
 'Средний счёт:407 ₽' 'Средний счёт:410 ₽' 'Средний счёт:411 ₽'
 'Средний счёт:412 ₽' 'Средний счёт:413 ₽' 'Средний счёт:415 ₽'
 'Средний счёт:416 ₽' 'Средний счёт:420–680 ₽' 'Средний счёт:422 ₽'
 'Средний счёт:426 ₽' 'Средний счёт:430 ₽' 'Средний счёт:432 ₽'
 'Средний счёт:433 ₽' 'Средний счёт:434 ₽' 'Средний счёт:435 ₽'
 'Средний счёт:438 ₽' 'Средний счёт:439 ₽' 'Средний счёт:441 ₽'
 'Средний счёт:443 ₽' 'Средний счёт:450 ₽' 'Средний счёт:4500–5000 ₽'
 'Средний счёт:4500–5500 ₽' 'Средний счёт:450–500 ₽'
 'Средний счёт:450–550 ₽' 'Средний счёт:450–600 ₽'
 'Средний счёт:450–650 ₽' 'Средний счёт:450–700 ₽'
 'Средний счёт:450–750 ₽' 'Средний счёт:450–800 ₽'
 'Средний счёт:450–900 ₽' 'Средний счёт:453 ₽' 'Средний счёт:465 ₽'
 'Средний счёт:470 ₽' 'Средний счёт:472 ₽' 'Средний счёт:475 ₽'
 'Средний счёт:480 ₽' 'Средний счёт:495 ₽' 'Средний счёт:499–700 ₽'
 'Средний счёт:49–369 ₽' 'Средний счёт:50 ₽' 'Средний счёт:500 ₽'
 'Средний счёт:5000 ₽' 'Средний счёт:5000–15000 ₽'
 'Средний счёт:5000–17000 ₽' 'Средний счёт:5000–5500 ₽'
 'Средний счёт:5000–8000 ₽' 'Средний счёт:500–1000 ₽'
 'Средний счёт:500–1050 ₽' 'Средний счёт:500–1100 ₽'
 'Средний счёт:500–1200 ₽' 'Средний счёт:500–1300 ₽'
 'Средний счёт:500–1500 ₽' 'Средний счёт:500–2000 ₽'
 'Средний счёт:500–2500 ₽' 'Средний счёт:500–3000 ₽'
 'Средний счёт:500–5000 ₽' 'Средний счёт:500–520 ₽'
 'Средний счёт:500–550 ₽' 'Средний счёт:500–600 ₽'
 'Средний счёт:500–650 ₽' 'Средний счёт:500–700 ₽'
 'Средний счёт:500–750 ₽' 'Средний счёт:500–800 ₽'
 'Средний счёт:500–900 ₽' 'Средний счёт:503 ₽' 'Средний счёт:508 ₽'
 'Средний счёт:50–200 ₽' 'Средний счёт:50–250 ₽' 'Средний счёт:50–300 ₽'
 'Средний счёт:520–1200 ₽' 'Средний счёт:520–600 ₽' 'Средний счёт:550 ₽'
 'Средний счёт:5500 ₽' 'Средний счёт:550–1300 ₽' 'Средний счёт:550–1500 ₽'
 'Средний счёт:550–1550 ₽' 'Средний счёт:550–700 ₽'
 'Средний счёт:550–750 ₽' 'Средний счёт:590–1490 ₽' 'Средний счёт:600 ₽'
 'Средний счёт:6000 ₽' 'Средний счёт:6000–8000 ₽'
 'Средний счёт:600–1000 ₽' 'Средний счёт:600–1200 ₽'
 'Средний счёт:600–1300 ₽' 'Средний счёт:600–1500 ₽'
 'Средний счёт:600–2000 ₽' 'Средний счёт:600–700 ₽'
 'Средний счёт:600–750 ₽' 'Средний счёт:600–800 ₽'
 'Средний счёт:600–900 ₽' 'Средний счёт:600–950 ₽' 'Средний счёт:60–140 ₽'
 'Средний счёт:60–180 ₽' 'Средний счёт:60–400 ₽' 'Средний счёт:620 ₽'
 'Средний счёт:650 ₽' 'Средний счёт:650–1000 ₽' 'Средний счёт:650–2000 ₽'
 'Средний счёт:650–800 ₽' 'Средний счёт:650–850 ₽' 'Средний счёт:670 ₽'
 'Средний счёт:69–499 ₽' 'Средний счёт:700 ₽' 'Средний счёт:7000 ₽'
 'Средний счёт:7000–7500 ₽' 'Средний счёт:700–1000 ₽'
 'Средний счёт:700–1100 ₽' 'Средний счёт:700–1200 ₽'
 'Средний счёт:700–1300 ₽' 'Средний счёт:700–1400 ₽'
 'Средний счёт:700–1500 ₽' 'Средний счёт:700–1800 ₽'
 'Средний счёт:700–3000 ₽' 'Средний счёт:700–3500 ₽'
 'Средний счёт:700–800 ₽' 'Средний счёт:700–850 ₽'
 'Средний счёт:700–900 ₽' 'Средний счёт:70–150 ₽' 'Средний счёт:70–200 ₽'
 'Средний счёт:750 ₽' 'Средний счёт:750–1000 ₽' 'Средний счёт:750–1200 ₽'
 'Средний счёт:750–1500 ₽' 'Средний счёт:750–850 ₽'
 'Средний счёт:750–900 ₽' 'Средний счёт:795–1325 ₽' 'Средний счёт:800 ₽'
 'Средний счёт:800–1000 ₽' 'Средний счёт:800–1100 ₽'
 'Средний счёт:800–1200 ₽' 'Средний счёт:800–1300 ₽'
 'Средний счёт:800–1500 ₽' 'Средний счёт:800–1800 ₽'
 'Средний счёт:800–2000 ₽' 'Средний счёт:800–3000 ₽'
 'Средний счёт:80–220 ₽' 'Средний счёт:80–300 ₽' 'Средний счёт:80–340 ₽'
 'Средний счёт:80–350 ₽' 'Средний счёт:850 ₽' 'Средний счёт:850–1000 ₽'
 'Средний счёт:850–1100 ₽' 'Средний счёт:850–1200 ₽'
 'Средний счёт:850–1500 ₽' 'Средний счёт:90 ₽' 'Средний счёт:900 ₽'
 'Средний счёт:900–1000 ₽' 'Средний счёт:900–1100 ₽'
 'Средний счёт:900–1150 ₽' 'Средний счёт:900–1200 ₽'
 'Средний счёт:900–1400 ₽' 'Средний счёт:900–1500 ₽'
 'Средний счёт:90–190 ₽' 'Средний счёт:90–230 ₽' 'Средний счёт:90–450 ₽'
 'Средний счёт:950–1200 ₽' 'Средний счёт:950–1500 ₽'
 'Средний счёт:99–500 ₽' 'Средний счёт:до 1000 ₽' 'Средний счёт:до 1500 ₽'
 'Средний счёт:до 300 ₽' 'Средний счёт:до 350 ₽' 'Средний счёт:до 470 ₽'
 'Средний счёт:до 500 ₽' 'Средний счёт:до 650 ₽' 'Средний счёт:от 0 ₽'
 'Средний счёт:от 100 ₽' 'Средний счёт:от 1000 ₽' 'Средний счёт:от 1090 ₽'
 'Средний счёт:от 120 ₽' 'Средний счёт:от 1200 ₽' 'Средний счёт:от 140 ₽'
 'Средний счёт:от 1400 ₽' 'Средний счёт:от 150 ₽' 'Средний счёт:от 1500 ₽'
 'Средний счёт:от 165 ₽' 'Средний счёт:от 175 ₽' 'Средний счёт:от 180 ₽'
 'Средний счёт:от 1800 ₽' 'Средний счёт:от 199 ₽' 'Средний счёт:от 200 ₽'
 'Средний счёт:от 2000 ₽' 'Средний счёт:от 230 ₽' 'Средний счёт:от 240 ₽'
 'Средний счёт:от 250 ₽' 'Средний счёт:от 2500 ₽' 'Средний счёт:от 270 ₽'
 'Средний счёт:от 30 ₽' 'Средний счёт:от 300 ₽' 'Средний счёт:от 3000 ₽'
 'Средний счёт:от 320 ₽' 'Средний счёт:от 330 ₽' 'Средний счёт:от 340 ₽'
 'Средний счёт:от 345 ₽' 'Средний счёт:от 350 ₽' 'Средний счёт:от 3500 ₽'
 'Средний счёт:от 390 ₽' 'Средний счёт:от 399 ₽' 'Средний счёт:от 400 ₽'
 'Средний счёт:от 4000 ₽' 'Средний счёт:от 420 ₽' 'Средний счёт:от 450 ₽'
 'Средний счёт:от 470 ₽' 'Средний счёт:от 475 ₽' 'Средний счёт:от 499 ₽'
 'Средний счёт:от 50 ₽' 'Средний счёт:от 500 ₽' 'Средний счёт:от 5000 ₽'
 'Средний счёт:от 549 ₽' 'Средний счёт:от 600 ₽' 'Средний счёт:от 650 ₽'
 'Средний счёт:от 700 ₽' 'Средний счёт:от 800 ₽' 'Средний счёт:от 850 ₽'
 'Цена бокала пива:100–250 ₽' 'Цена бокала пива:120–350 ₽'
 'Цена бокала пива:129–319 ₽' 'Цена бокала пива:130–150 ₽'
 'Цена бокала пива:140–190 ₽' 'Цена бокала пива:140–330 ₽'
 'Цена бокала пива:140–420 ₽' 'Цена бокала пива:150 ₽'
 'Цена бокала пива:150–180 ₽' 'Цена бокала пива:150–230 ₽'
 'Цена бокала пива:150–250 ₽' 'Цена бокала пива:150–290 ₽'
 'Цена бокала пива:150–350 ₽' 'Цена бокала пива:150–450 ₽'
 'Цена бокала пива:155–465 ₽' 'Цена бокала пива:160–350 ₽'
 'Цена бокала пива:160–390 ₽' 'Цена бокала пива:160–499 ₽'
 'Цена бокала пива:170–200 ₽' 'Цена бокала пива:170–240 ₽'
 'Цена бокала пива:170–320 ₽' 'Цена бокала пива:170–380 ₽'
 'Цена бокала пива:180–260 ₽' 'Цена бокала пива:180–330 ₽'
 'Цена бокала пива:180–380 ₽' 'Цена бокала пива:180–400 ₽'
 'Цена бокала пива:180–420 ₽' 'Цена бокала пива:180–480 ₽'
 'Цена бокала пива:190–350 ₽' 'Цена бокала пива:190–390 ₽'
 'Цена бокала пива:190–430 ₽' 'Цена бокала пива:190–450 ₽'
 'Цена бокала пива:190–500 ₽' 'Цена бокала пива:199–300 ₽'
 'Цена бокала пива:199–459 ₽' 'Цена бокала пива:200 ₽'
 'Цена бокала пива:200–1100 ₽' 'Цена бокала пива:200–240 ₽'
 'Цена бокала пива:200–300 ₽' 'Цена бокала пива:200–320 ₽'
 'Цена бокала пива:200–350 ₽' 'Цена бокала пива:200–380 ₽'
 'Цена бокала пива:200–390 ₽' 'Цена бокала пива:200–440 ₽'
 'Цена бокала пива:220–250 ₽' 'Цена бокала пива:220–350 ₽'
 'Цена бокала пива:220–390 ₽' 'Цена бокала пива:220–440 ₽'
 'Цена бокала пива:220–450 ₽' 'Цена бокала пива:220–500 ₽'
 'Цена бокала пива:220–550 ₽' 'Цена бокала пива:230 ₽'
 'Цена бокала пива:230–350 ₽' 'Цена бокала пива:240–350 ₽'
 'Цена бокала пива:240–380 ₽' 'Цена бокала пива:250–350 ₽'
 'Цена бокала пива:250–390 ₽' 'Цена бокала пива:250–395 ₽'
 'Цена бокала пива:250–400 ₽' 'Цена бокала пива:250–450 ₽'
 'Цена бокала пива:250–490 ₽' 'Цена бокала пива:250–550 ₽'
 'Цена бокала пива:260–360 ₽' 'Цена бокала пива:260–380 ₽'
 'Цена бокала пива:260–400 ₽' 'Цена бокала пива:270–1100 ₽'
 'Цена бокала пива:270–390 ₽' 'Цена бокала пива:270–490 ₽'
 'Цена бокала пива:280 ₽' 'Цена бокала пива:280–360 ₽'
 'Цена бокала пива:280–400 ₽' 'Цена бокала пива:280–410 ₽'
 'Цена бокала пива:290–390 ₽' 'Цена бокала пива:290–440 ₽'
 'Цена бокала пива:300 ₽' 'Цена бокала пива:300–400 ₽'
 'Цена бокала пива:300–420 ₽' 'Цена бокала пива:300–475 ₽'
 'Цена бокала пива:300–500 ₽' 'Цена бокала пива:300–600 ₽'
 'Цена бокала пива:320–375 ₽' 'Цена бокала пива:320–380 ₽'
 'Цена бокала пива:320–440 ₽' 'Цена бокала пива:320–460 ₽'
 'Цена бокала пива:320–470 ₽' 'Цена бокала пива:330–490 ₽'
 'Цена бокала пива:340 ₽' 'Цена бокала пива:340–420 ₽'
 'Цена бокала пива:350 ₽' 'Цена бокала пива:350–370 ₽'
 'Цена бокала пива:350–400 ₽' 'Цена бокала пива:350–500 ₽'
 'Цена бокала пива:360 ₽' 'Цена бокала пива:370–410 ₽'
 'Цена бокала пива:370–420 ₽' 'Цена бокала пива:380–400 ₽'
 'Цена бокала пива:390 ₽' 'Цена бокала пива:390–530 ₽'
 'Цена бокала пива:390–590 ₽' 'Цена бокала пива:39–190 ₽'
 'Цена бокала пива:420–640 ₽' 'Цена бокала пива:88–460 ₽'
 'Цена бокала пива:90–230 ₽' 'Цена бокала пива:90–250 ₽'
 'Цена бокала пива:до 350 ₽' 'Цена бокала пива:от 100 ₽'
 'Цена бокала пива:от 140 ₽' 'Цена бокала пива:от 149 ₽'
 'Цена бокала пива:от 195 ₽' 'Цена бокала пива:от 200 ₽'
 'Цена бокала пива:от 350 ₽' 'Цена чашки капучино:100 ₽'
 'Цена чашки капучино:100–120 ₽' 'Цена чашки капучино:100–140 ₽'
 'Цена чашки капучино:100–150 ₽' 'Цена чашки капучино:100–160 ₽'
 'Цена чашки капучино:100–170 ₽' 'Цена чашки капучино:100–179 ₽'
 'Цена чашки капучино:100–180 ₽' 'Цена чашки капучино:100–200 ₽'
 'Цена чашки капучино:100–210 ₽' 'Цена чашки капучино:100–220 ₽'
 'Цена чашки капучино:105–145 ₽' 'Цена чашки капучино:109–169 ₽'
 'Цена чашки капучино:110 ₽' 'Цена чашки капучино:110–150 ₽'
 'Цена чашки капучино:110–160 ₽' 'Цена чашки капучино:110–165 ₽'
 'Цена чашки капучино:110–170 ₽' 'Цена чашки капучино:110–190 ₽'
 'Цена чашки капучино:110–200 ₽' 'Цена чашки капучино:115–140 ₽'
 'Цена чашки капучино:119–149 ₽' 'Цена чашки капучино:119–169 ₽'
 'Цена чашки капучино:119–179 ₽' 'Цена чашки капучино:120 ₽'
 'Цена чашки капучино:120–140 ₽' 'Цена чашки капучино:120–150 ₽'
 'Цена чашки капучино:120–160 ₽' 'Цена чашки капучино:120–170 ₽'
 'Цена чашки капучино:120–180 ₽' 'Цена чашки капучино:120–190 ₽'
 'Цена чашки капучино:120–200 ₽' 'Цена чашки капучино:120–210 ₽'
 'Цена чашки капучино:120–215 ₽' 'Цена чашки капучино:120–220 ₽'
 'Цена чашки капучино:120–250 ₽' 'Цена чашки капучино:128–148 ₽'
 'Цена чашки капучино:129–169 ₽' 'Цена чашки капучино:129–179 ₽'
 'Цена чашки капучино:130 ₽' 'Цена чашки капучино:130–150 ₽'
 'Цена чашки капучино:130–160 ₽' 'Цена чашки капучино:130–170 ₽'
 'Цена чашки капучино:130–180 ₽' 'Цена чашки капучино:130–190 ₽'
 'Цена чашки капучино:130–210 ₽' 'Цена чашки капучино:130–230 ₽'
 'Цена чашки капучино:130–250 ₽' 'Цена чашки капучино:139–189 ₽'
 'Цена чашки капучино:140–160 ₽' 'Цена чашки капучино:140–170 ₽'
 'Цена чашки капучино:140–180 ₽' 'Цена чашки капучино:140–190 ₽'
 'Цена чашки капучино:140–200 ₽' 'Цена чашки капучино:140–220 ₽'
 'Цена чашки капучино:145–185 ₽' 'Цена чашки капучино:145–200 ₽'
 'Цена чашки капучино:145–225 ₽' 'Цена чашки капучино:149–199 ₽'
 'Цена чашки капучино:149–219 ₽' 'Цена чашки капучино:149–259 ₽'
 'Цена чашки капучино:150 ₽' 'Цена чашки капучино:150–180 ₽'
 'Цена чашки капучино:150–190 ₽' 'Цена чашки капучино:150–200 ₽'
 'Цена чашки капучино:150–210 ₽' 'Цена чашки капучино:150–219 ₽'
 'Цена чашки капучино:150–220 ₽' 'Цена чашки капучино:150–240 ₽'
 'Цена чашки капучино:150–245 ₽' 'Цена чашки капучино:150–250 ₽'
 'Цена чашки капучино:150–290 ₽' 'Цена чашки капучино:150–320 ₽'
 'Цена чашки капучино:155–170 ₽' 'Цена чашки капучино:155–185 ₽'
 'Цена чашки капучино:159 ₽' 'Цена чашки капучино:159–200 ₽'
 'Цена чашки капучино:160–180 ₽' 'Цена чашки капучино:160–200 ₽'
 'Цена чашки капучино:160–210 ₽' 'Цена чашки капучино:160–220 ₽'
 'Цена чашки капучино:160–230 ₽' 'Цена чашки капучино:160–250 ₽'
 'Цена чашки капучино:160–270 ₽' 'Цена чашки капучино:160–350 ₽'
 'Цена чашки капучино:170–190 ₽' 'Цена чашки капучино:170–200 ₽'
 'Цена чашки капучино:170–210 ₽' 'Цена чашки капучино:170–220 ₽'
 'Цена чашки капучино:170–230 ₽' 'Цена чашки капучино:170–239 ₽'
 'Цена чашки капучино:170–250 ₽' 'Цена чашки капучино:179–219 ₽'
 'Цена чашки капучино:179–249 ₽' 'Цена чашки капучино:179–275 ₽'
 'Цена чашки капучино:179–314 ₽' 'Цена чашки капучино:180–200 ₽'
 'Цена чашки капучино:180–210 ₽' 'Цена чашки капучино:180–230 ₽'
 'Цена чашки капучино:180–250 ₽' 'Цена чашки капучино:180–300 ₽'
 'Цена чашки капучино:184–194 ₽' 'Цена чашки капучино:185–285 ₽'
 'Цена чашки капучино:189–269 ₽' 'Цена чашки капучино:190–220 ₽'
 'Цена чашки капучино:190–230 ₽' 'Цена чашки капучино:190–240 ₽'
 'Цена чашки капучино:190–245 ₽' 'Цена чашки капучино:190–250 ₽'
 'Цена чашки капучино:195 ₽' 'Цена чашки капучино:195–245 ₽'
 'Цена чашки капучино:195–295 ₽' 'Цена чашки капучино:199–229 ₽'
 'Цена чашки капучино:199–285 ₽' 'Цена чашки капучино:200 ₽'
 'Цена чашки капучино:200–220 ₽' 'Цена чашки капучино:200–240 ₽'
 'Цена чашки капучино:200–250 ₽' 'Цена чашки капучино:200–260 ₽'
 'Цена чашки капучино:200–275 ₽' 'Цена чашки капучино:200–300 ₽'
 'Цена чашки капучино:200–350 ₽' 'Цена чашки капучино:205–245 ₽'
 'Цена чашки капучино:205–280 ₽' 'Цена чашки капучино:210–250 ₽'
 'Цена чашки капучино:210–290 ₽' 'Цена чашки капучино:220 ₽'
 'Цена чашки капучино:220–240 ₽' 'Цена чашки капучино:220–250 ₽'
 'Цена чашки капучино:220–270 ₽' 'Цена чашки капучино:220–280 ₽'
 'Цена чашки капучино:220–320 ₽' 'Цена чашки капучино:220–330 ₽'
 'Цена чашки капучино:220–350 ₽' 'Цена чашки капучино:230–250 ₽'
 'Цена чашки капучино:230–280 ₽' 'Цена чашки капучино:230–290 ₽'
 'Цена чашки капучино:230–2907 ₽' 'Цена чашки капучино:230–320 ₽'
 'Цена чашки капучино:230–350 ₽' 'Цена чашки капучино:235–335 ₽'
 'Цена чашки капучино:239–269 ₽' 'Цена чашки капучино:239–274 ₽'
 'Цена чашки капучино:239–279 ₽' 'Цена чашки капучино:240 ₽'
 'Цена чашки капучино:249–284 ₽' 'Цена чашки капучино:249–309 ₽'
 'Цена чашки капучино:250 ₽' 'Цена чашки капучино:250–270 ₽'
 'Цена чашки капучино:250–280 ₽' 'Цена чашки капучино:250–290 ₽'
 'Цена чашки капучино:250–300 ₽' 'Цена чашки капучино:250–330 ₽'
 'Цена чашки капучино:250–340 ₽' 'Цена чашки капучино:250–350 ₽'
 'Цена чашки капучино:250–390 ₽' 'Цена чашки капучино:250–500 ₽'
 'Цена чашки капучино:270 ₽' 'Цена чашки капучино:270–280 ₽'
 'Цена чашки капучино:275 ₽' 'Цена чашки капучино:279–378 ₽'
 'Цена чашки капучино:280–350 ₽' 'Цена чашки капучино:284–299 ₽'
 'Цена чашки капучино:285–289 ₽' 'Цена чашки капучино:285–310 ₽'
 'Цена чашки капучино:300 ₽' 'Цена чашки капучино:300–350 ₽'
 'Цена чашки капучино:50–150 ₽' 'Цена чашки капучино:59–99 ₽'
 'Цена чашки капучино:60–100 ₽' 'Цена чашки капучино:60–120 ₽'
 'Цена чашки капучино:60–150 ₽' 'Цена чашки капучино:60–180 ₽'
 'Цена чашки капучино:60–300 ₽' 'Цена чашки капучино:60–90 ₽'
 'Цена чашки капучино:65–140 ₽' 'Цена чашки капучино:69–99 ₽'
 'Цена чашки капучино:70–150 ₽' 'Цена чашки капучино:75 ₽'
 'Цена чашки капучино:75–150 ₽' 'Цена чашки капучино:80–120 ₽'
 'Цена чашки капучино:80–150 ₽' 'Цена чашки капучино:80–160 ₽'
 'Цена чашки капучино:80–175 ₽' 'Цена чашки капучино:80–240 ₽'
 'Цена чашки капучино:85–350 ₽' 'Цена чашки капучино:89–149 ₽'
 'Цена чашки капучино:89–209 ₽' 'Цена чашки капучино:89–229 ₽'
 'Цена чашки капучино:90–100 ₽' 'Цена чашки капучино:90–110 ₽'
 'Цена чашки капучино:90–130 ₽' 'Цена чашки капучино:90–140 ₽'
 'Цена чашки капучино:90–150 ₽' 'Цена чашки капучино:90–158 ₽'
 'Цена чашки капучино:90–160 ₽' 'Цена чашки капучино:90–170 ₽'
 'Цена чашки капучино:90–180 ₽' 'Цена чашки капучино:90–240 ₽'
 'Цена чашки капучино:90–250 ₽' 'Цена чашки капучино:90–98 ₽'
 'Цена чашки капучино:90–99 ₽' 'Цена чашки капучино:95 ₽'
 'Цена чашки капучино:95–159 ₽' 'Цена чашки капучино:98–150 ₽'
 'Цена чашки капучино:99–169 ₽' 'Цена чашки капучино:99–179 ₽'
 'Цена чашки капучино:99–180 ₽' 'Цена чашки капучино:99–200 ₽'
 'Цена чашки капучино:до 150 ₽' 'Цена чашки капучино:до 179 ₽'
 'Цена чашки капучино:от 100 ₽' 'Цена чашки капучино:от 110 ₽'
 'Цена чашки капучино:от 120 ₽' 'Цена чашки капучино:от 129 ₽'
 'Цена чашки капучино:от 130 ₽' 'Цена чашки капучино:от 139 ₽'
 'Цена чашки капучино:от 150 ₽' 'Цена чашки капучино:от 160 ₽'
 'Цена чашки капучино:от 169 ₽' 'Цена чашки капучино:от 170 ₽'
 'Цена чашки капучино:от 180 ₽' 'Цена чашки капучино:от 200 ₽'
 'Цена чашки капучино:от 205 ₽' 'Цена чашки капучино:от 230 ₽'
 'Цена чашки капучино:от 250 ₽' 'Цена чашки капучино:от 270 ₽'
 'Цена чашки капучино:от 300 ₽' 'Цена чашки капучино:от 60 ₽'
 'Цена чашки капучино:от 89 ₽' 'Цена чашки капучино:от 90 ₽' nan]
Описание данных:
count                         3816
unique                         897
top       Средний счёт:1000–1500 ₽
freq                           241
Name: avg_bill, dtype: object

**************************************************

столбец: middle_avg_bill

Тип данных: float64
Количество пропусков: 5257
Описание данных:
count     3149.00
mean       958.05
std       1009.73
min          0.00
25%        375.00
50%        750.00
75%       1250.00
max      35000.00
Name: middle_avg_bill, dtype: float64

**************************************************

столбец: middle_coffee_cup

Тип данных: float64
Количество пропусков: 7871
Описание данных:
count     535.00
mean      174.72
std        88.95
min        60.00
25%       124.50
50%       169.00
75%       225.00
max      1568.00
Name: middle_coffee_cup, dtype: float64

**************************************************

столбец: chain

Тип данных: int64
Количество пропусков: 0
Описание данных:
count    8406.00
mean        0.38
std         0.49
min         0.00
25%         0.00
50%         0.00
75%         1.00
max         1.00
Name: chain, dtype: float64

**************************************************

столбец: seats

Тип данных: float64
Количество пропусков: 3611
Описание данных:
count    4795.00
mean      108.42
std       122.83
min         0.00
25%        40.00
50%        75.00
75%       140.00
max      1288.00
Name: seats, dtype: float64

**************************************************

Проверим дубликаты
Явных дубликатов нет

Вывод:

  • В представленных данных 8406 строк и 14 столбцов
  • пропуски есть в следующих столбцах:
    • hours (дни и часы работы) - 536 пропусков
    • price — категория цен в заведении, например «средние», «ниже среднего», «выше среднего» и так далее - 5091 пропуск
    • avg_bill (хранит среднюю стоимость заказа в виде диапазона) - 4590 пропусков
    • middle_avg_bill - 5257 пропусков
    • middle_coffee_cup - 7871 пропуск
    • seats - 3611 пропусков

Уникальных названий заведений на первый взгляд - 5614 (логично, что меньше, чем данных, так как есть сети), но возможны неявные дубликаты, надо проверить

  • Типов заведений 8: 'бар,паб' 'булочная' 'быстрое питание' 'кафе' 'кофейня' 'пиццерия', 'ресторан' 'столовая'
  • В данных представлены 9 округов города Москвы (отсутствуют данные по "Зеленограду" и "Новой Москве"), больше всего заведений (26,6%) расположены в Центральном административном округе.
  • hours (часы работы) записаны очень разнообразно, несмотря на то, что часть заполнена "Нет информации", имеются пропуски. Логично их заполнить той же фразой "Нет информации". С другой стороны, можно не заполнять, так как будем категорировать заведения по принципу круглосуточной работы.
  • координаты (ширина и долгота) соответствуют координатам Москвы
  • rating рейтинг распределен от 1.0 до 5.0
    -price Категории цен: 'высокие' 'выше среднего' 'низкие' 'средние'. Можно попробовать дозаполнить исходя из столбца "middle_avg_bill" и "middle_coffee_cup", но в дальнейшем этот столбец нам не понадобится.
  • middle_avg_bill должен содержать информацию о среднем чеке, если столбец avg_bill, начинается с подстроки «Средний счёт», но минимальное значение этого столбца равно - 0, в заполнении данных произошла ошибка
  • middle_coffee_cup - Цена одной чашки капучино от 60 до 1568 руб.
  • seats - имеет и пропуски и значения 0. Вызывает сомнение максимальное значение - 1288 посадочных мест.
In [7]:
display(moscow_places.query('seats == 1288'))
name category address district hours lat lng rating price avg_bill middle_avg_bill middle_coffee_cup chain seats
6518 DelonixCafe ресторан Москва, проспект Вернадского, 94, корп. 1 Западный административный округ ежедневно, круглосуточно 55.65 37.48 4.10 высокие Средний счёт:1500–2000 ₽ 1750.00 NaN 0 1288.00
6524 Ян Примус ресторан Москва, проспект Вернадского, 121, корп. 1 Западный административный округ пн-чт 12:00–00:00; пт,сб 12:00–02:00; вс 12:00–00:00 55.66 37.48 4.50 выше среднего Средний счёт:1500 ₽ 1500.00 NaN 1 1288.00
6574 Мюнгер пиццерия Москва, проспект Вернадского, 97, корп. 1 Западный административный округ пн-пт 08:00–21:00; сб,вс 10:00–21:00 55.67 37.49 4.80 NaN NaN NaN NaN 1 1288.00
6641 One Price Coffee кофейня Москва, проспект Вернадского, 84, стр. 1 Западный административный округ ежедневно, 08:30–20:00 55.67 37.48 4.30 NaN NaN NaN NaN 1 1288.00
6658 ГудБар бар,паб Москва, проспект Вернадского, 97, корп. 1 Западный административный округ пн-пт 11:00–23:00; сб,вс 13:00–23:00 55.67 37.49 4.10 средние Средний счёт:700 ₽ 700.00 NaN 0 1288.00
6684 Пивной ресторан бар,паб Москва, проспект Вернадского, 121, корп. 1 Западный административный округ NaN 55.66 37.48 4.50 NaN NaN NaN NaN 0 1288.00
6690 Японская кухня ресторан Москва, проспект Вернадского, 121, корп. 1 Западный административный округ NaN 55.66 37.48 4.40 NaN NaN NaN NaN 1 1288.00
6771 Точка кафе Москва, проспект Вернадского, 84, стр. 1 Западный административный округ NaN 55.67 37.48 4.70 NaN NaN NaN NaN 1 1288.00
6807 Loft-cafe академия кафе Москва, проспект Вернадского, 84, стр. 1 Западный административный округ пн-пт 09:00–20:00; сб 09:00–16:00 55.67 37.48 3.60 NaN NaN NaN NaN 0 1288.00
6808 Яндекс Лавка ресторан Москва, проспект Вернадского, 51, стр. 1 Западный административный округ ежедневно, круглосуточно 55.67 37.51 4.00 NaN NaN NaN NaN 1 1288.00
6838 Alternative coffee кофейня Москва, проспект Вернадского, 41, стр. 1 Западный административный округ пн-пт 09:00–21:00; сб,вс 09:00–22:00 55.67 37.50 4.30 NaN NaN NaN NaN 0 1288.00

Все заведения с 1288 посадочными местами расположены на проспекте Вернадского, некоторые в одном доме. В данных есть ошибка, возможно, заведения расположены на фудкорте и получили общее количество мест. Дальше в исследовании будем брать медианные значения, поэтому выбросы в количестве посадочных мест не повлияют на данные

Предобработка данных

  • Изучим, есть ли дубликаты в данных.

  • Создадим столбец street с названиями улиц из столбца с адресом.

  • Создадим столбец is_24/7 с обозначением, что заведение работает ежедневно и круглосуточно (24/7):
    • логическое значение True — если заведение работает ежедневно и круглосуточно;
    • логическое значение False — в противоположном случае.

для проверки на неявные дубликаты приведем названия заведений к одному виду - к верхнему регистру

In [8]:
moscow_places['name']=moscow_places['name'].str.upper()
In [9]:
display(moscow_places[['name','address']].duplicated().sum())
3

нашли три дубликата. удалим их

In [10]:
moscow_places = moscow_places.loc[moscow_places[['name','address']].duplicated() == False]
In [11]:
# функция выделения названия улицы из адреса
def street_from_address(address):
    address = address.split(',')
    return address[1].lstrip()
In [12]:
moscow_places['street'] = moscow_places['address'].apply(street_from_address)
In [13]:
# функция определения круглосуточного режима работы
def is_24_7(hours):
    hours=str(hours)
    if 'ежедневно' in hours and 'круглосуточно' in hours:
        return True
    else:
        return False
In [14]:
moscow_places['is_24/7'] = moscow_places['hours'].apply(is_24_7)
In [15]:
print('Всего заведений, работающих 24 часа 7 дней в неделю:', moscow_places.loc[moscow_places.loc[:,'is_24/7'] == True].name.count())
Всего заведений, работающих 24 часа 7 дней в неделю: 730

Вывод:

  • удалили 3 неявных дубликата
  • создали столбец с названиями улиц - street
  • создали столбец с указателем работает ли заведение ежедневно и круглосуточно - is_24/7
  • Всего в Москве 730 заведений, работающих 24 часа 7 дней в неделю

Анализ данных

Исследуем количество объектов общественного питания по категориям.

Типов заведений 8: 'бар,паб' 'булочная' 'быстрое питание' 'кафе' 'кофейня' 'пиццерия', 'ресторан' 'столовая'

In [16]:
moscow_places.groupby('category')['name'].count().sort_values(ascending=False)
Out[16]:
category
кафе               2377
ресторан           2042
кофейня            1413
бар,паб             764
пиццерия            633
быстрое питание     603
столовая            315
булочная            256
Name: name, dtype: int64
In [17]:
fig = px.bar(moscow_places.groupby('category')['name'].count().sort_values(ascending=False).reset_index(), x='name', y='category', title='Распределение объектов общественного питания по категориям', labels={'name':'количество','category':'категория'})
fig.update_xaxes(tickangle=45)
fig.update_traces(textposition='inside', textfont_size=15)
fig.update_traces(marker_color='blue', marker_line_color='blue',
                  marker_line_width=1, opacity=0.4)
fig.show() 

Вывод:

  • Самые популярные типы заведений - кафе (2377 заведений) и ресторан (2042)
  • Менее популярные - булочная (256) и столовая (315)

Исследуем количество посадочных мест в местах по категориям: рестораны, кофейни, пиццерии, бары и так далее.

In [18]:
fig = px.bar(moscow_places.groupby('category')['seats'].median().sort_values(ascending=False).reset_index(), x='category', y='seats', title='Распределение медианного количества посадочных мест по категориям ', labels={'seats':'количество','category':'категория'})
fig.update_xaxes(tickangle=45)
fig.show() 
In [19]:
df_grouped=moscow_places.groupby('category').median().sort_values(by='seats')
In [20]:
sns.set_palette('pastel') 
plt.figure(figsize=(10, 10))
plt.title('Распределение количества посадочных мест по категориям',fontsize=15)  
ax = sns.boxplot(x='seats',y='category', data=moscow_places, orient='h',order=df_grouped.index);
plt.xlim(0,320)
plt.xlabel('Посадочные места', fontsize=13)
plt.ylabel('Категория',fontsize=13)
sns.despine()

Вывод:

Количество посадочных мест в среднем (медианное) от 50 для булочной до 86 посадочных мест для ресторана.Разброс посадочных мест везде большой (самый большой у быстрого питания, что логично, так как это может быть и шаурма без посадочных мест, так и шаурма на фудкорте)

Соотношение сетевых и несетевых заведений в датасете.

In [21]:
moscow_places['chain']=moscow_places['chain'].astype("string").replace({'0':'несетевой','1':'сетевой'})
In [22]:
# функция построения распределения по заданным параметрам: передаем датафрейм, колонки, по которым строим распределение, обозначение оси х, название графика
def distribution_category (data,name,name2,namex, title_,table_is=True,text_on=False):
    data_grouped = data.pivot_table(index=[name,name2],values='address', aggfunc='count')
    if table_is == True: display(data.groupby([name,name2],sort=False)['name'].count())
    data_grouped = data_grouped.reset_index().rename(columns={'address':'count'}).sort_values(by='count',ascending=False) 
    if text_on==True:
        fig = px.bar(data_grouped, y=data_grouped[name], x=data_grouped['count'], color=data_grouped[name2], title=title_, labels={'count':'количество заведений',name:namex}, text=data_grouped['count'],orientation='h')
    else:
        fig = px.bar(data_grouped, y=data_grouped[name], x=data_grouped['count'], color=data_grouped[name2], title=title_, labels={'count':'количество заведений',name:namex},orientation='h')
    fig.update_xaxes(tickangle=45)
    fig.update_layout(yaxis={'categoryorder':'total ascending'}) 
    fig.update_layout(
    autosize=False,
    width=900 ,
    height=600,)
    fig.show() 
    
In [23]:
distribution_category (moscow_places,'chain','category','отношение к сети', 'Распределение сетевых и несетевых заведений по категориям',False,True)
In [24]:
distribution_category (moscow_places,'category','chain','категория', 'Распределение сетевых и несетевых заведений по категориям',False,True)

Вывод:

Сетевых заведений 3203, несетевых - 5200. Несетевых на 40% больше,чем сетевых

Топ-15 популярных сетей в Москве

In [25]:
 top_15_chain = moscow_places.query('chain == "сетевой"').groupby('name')['name'].count().sort_values(ascending=False).reset_index(name='count').head(15)
In [26]:
 top_15_chain
Out[26]:
name count
0 ШОКОЛАДНИЦА 120
1 ДОМИНО'С ПИЦЦА 76
2 ДОДО ПИЦЦА 74
3 ONE PRICE COFFEE 71
4 ЯНДЕКС ЛАВКА 69
5 COFIX 65
6 PRIME 50
7 ХИНКАЛЬНАЯ 44
8 КОФЕПОРТ 42
9 КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ 39
10 ТЕРЕМОК 38
11 ЧАЙХАНА 37
12 COFEFEST 32
13 БУХАНКА 32
14 МУ-МУ 27
In [27]:
# выведем в отдельную таблицу заведения, относящиеся к топ-15 сетей
moscow_chain=moscow_places.merge(top_15_chain)
In [28]:
plt.figure(figsize=(14, 8))
# строим столбчатый график средствами seaborn
sns.barplot(x='name', y='count', data=moscow_chain.sort_values(by='count',ascending=False)) 

# формируем заголовок графика и подписи осей 
plt.title('Топ-15 популярных сетей в Москве',fontsize=15)
plt.xlabel('Название сети', fontsize=12)
plt.ylabel('Количество заведений',fontsize=12)
# поворачиваем подписи значений по оси X на 45 градусов
plt.xticks(rotation=45)

plt.show()
In [29]:
moscow_chain.groupby('name')['rating'].median().sort_values()
Out[29]:
name
ЯНДЕКС ЛАВКА                           4.00
COFEFEST                               4.05
COFIX                                  4.10
ТЕРЕМОК                                4.10
ЧАЙХАНА                                4.10
ONE PRICE COFFEE                       4.20
PRIME                                  4.20
ДОМИНО'С ПИЦЦА                         4.20
КОФЕПОРТ                               4.20
ШОКОЛАДНИЦА                            4.20
ДОДО ПИЦЦА                             4.30
МУ-МУ                                  4.30
БУХАНКА                                4.40
КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ    4.40
ХИНКАЛЬНАЯ                             4.40
Name: rating, dtype: float64

Медианный рейтинг заведений из топ-15 сетей от 4.0 до 4.40

In [30]:
distribution_category (moscow_chain,'name','category','сеть', 'Распределение топ-15 сетей по категориям',True,True)
name                                 category       
БУХАНКА                              булочная            25
                                     кофейня              6
                                     кафе                 1
ДОДО ПИЦЦА                           пиццерия            74
ДОМИНО'С ПИЦЦА                       пиццерия            77
COFEFEST                             кофейня             31
                                     кафе                 1
COFIX                                кофейня             65
МУ-МУ                                кафе                12
                                     ресторан             8
                                     кофейня              2
                                     быстрое питание      2
                                     пиццерия             1
                                     столовая             1
                                     бар,паб              1
ТЕРЕМОК                              ресторан            36
                                     быстрое питание      2
ЧАЙХАНА                              кафе                26
                                     быстрое питание      2
                                     ресторан             9
ХИНКАЛЬНАЯ                           быстрое питание      6
                                     кафе                19
                                     ресторан            15
                                     столовая             1
                                     бар,паб              3
ONE PRICE COFFEE                     кофейня             72
ШОКОЛАДНИЦА                          кофейня            119
                                     кафе                 1
ЯНДЕКС ЛАВКА                         ресторан            69
КОФЕПОРТ                             кофейня             42
PRIME                                ресторан            49
                                     кафе                 1
КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ  кафе                39
Name: name, dtype: int64

Из графика видно, что некоторые заведения (Чайхана, Буханка, Му-Му, Хинкальная) имеют разную категорию:

  • Чайхана есть рестораны, кафе, быстрое питание
  • Хинкальная - рестораны, кафе, быстрое питание и даже бар.паб
  • Му-Му - кафе, ресторан, кофейня, быстрое питание
In [31]:
plt.figure(figsize=(14, 8))
# строим столбчатый график средствами seaborn
sns.barplot(x='category', y='address', data=moscow_chain.pivot_table(index=['category'],values='address', aggfunc='count').sort_values(by='address',ascending=False).reset_index(),color='#5d83b3') 

# формируем заголовок графика и подписи осей 
plt.title('Распределение заведений из Топ-15 популярных сетей в Москве по категориям',fontsize=15)
plt.xlabel('Категория', fontsize=12)
plt.ylabel('Количество заведений',fontsize=12)
# поворачиваем подписи значений по оси X на 45 градусов
plt.xticks(rotation=45)

plt.show()
In [32]:
moscow_chain.pivot_table(index=['category'],values='address', aggfunc='count').sort_values(by='address',ascending=False).reset_index()
Out[32]:
category address
0 кофейня 337
1 ресторан 186
2 пиццерия 152
3 кафе 100
4 булочная 25
5 быстрое питание 12
6 бар,паб 4
7 столовая 2

Вывод:

  • Топ-15 сетей: 'БУХАНКА', 'ДОДО ПИЦЦА', "ДОМИНО'С ПИЦЦА", 'COFEFEST', 'COFIX', 'МУ-МУ', 'ТЕРЕМОК', 'ЧАЙХАНА', 'ХИНКАЛЬНАЯ', 'ONE PRICE COFFEE', 'ШОКОЛАДНИЦА', 'ЯНДЕКС ЛАВКА', 'КОФЕПОРТ', 'PRIME', 'КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ
  • Самые популярные сети - Шоколадница (120 заведений в Москве), "ДОМИНО'С ПИЦЦА" (76 заведений), ДОДо Пицца (74 заведения)
  • Самые популярные категории сетей - кофейни (337 заведений). рестораны (188) и пиццерии (152). В сетях не популярна категория - столовая и бар.паб
  • В сетях (Чайхана, Хинкальная, Му-Му) имеются различия в указании категории заведения (ресторан, кофейня, быстрое питание), это может быть связано или с тем, что Хинкальная и Чайхана относятся к разным сетям с одним названием, или с ошибками определения категории, так как границы в категориях очень размыты
  • заведения из Топ-15 сетей объединяет высокий медианный рейтинг

Распределение заведений по округам

In [33]:
moscow_places.groupby('district')['name'].count().sort_values(ascending=False)
Out[33]:
district
Центральный административный округ         2242
Северный административный округ             899
Южный административный округ                892
Северо-Восточный административный округ     890
Западный административный округ             850
Восточный административный округ            798
Юго-Восточный административный округ        714
Юго-Западный административный округ         709
Северо-Западный административный округ      409
Name: name, dtype: int64

В данных представлены 9 округов города Москвы (отсутствуют данные по "Зеленограду" и "Новой Москве"), больше всего заведений (2242) расположены в Центральном административном округе.

In [34]:
#Распределение заведений по округам и по категориям
distribution_category (moscow_places,'district','category','округ', 'Распределение заведений по округам')
district                         category       
Северный административный округ  кафе               235
                                 ресторан           188
                                 кофейня            193
                                 пиццерия            77
                                 бар,паб             68
                                                   ... 
Южный административный округ     быстрое питание     85
                                 кафе               264
                                 столовая            44
                                 булочная            25
                                 пиццерия            73
Name: name, Length: 72, dtype: int64

Вывод:

Больше всего заведений расположено в Центральном административном округе (ЦАО)(2242). Самый популярный тип заведения в ЦАО -ресторан, кафе, кофейня. Меньше всего заведений - в Северо-Западном административном округе (СЗАО) - 409. Наиболее распространены - кафе, ресторан, кофейня

Распределение средних рейтингов по категориям заведений.

In [35]:
df_grouped=moscow_places.groupby('category').median().sort_values(by='rating')
df_grouped
Out[35]:
lat lng rating middle_avg_bill middle_coffee_cup seats is_24/7
category
быстрое питание 55.74 37.62 4.20 375.00 140.00 65.00 0.00
кафе 55.75 37.61 4.20 550.00 111.00 60.00 0.00
булочная 55.75 37.59 4.30 450.00 NaN 50.00 0.00
кофейня 55.76 37.60 4.30 400.00 170.00 80.00 0.00
пиццерия 55.75 37.60 4.30 600.00 150.00 55.00 0.00
ресторан 55.75 37.60 4.30 1250.00 NaN 86.00 0.00
столовая 55.76 37.62 4.30 300.00 NaN 75.50 0.00
бар,паб 55.76 37.61 4.40 1250.00 202.50 82.00 0.00
In [36]:
plt.figure(figsize=(10, 10))
plt.title('Распределение средних рейтингов по категориям заведений',fontsize=15)  
ax = sns.boxplot(x='rating',y='category', data=moscow_places, orient='h',order=df_grouped.index);
plt.xlabel('Рейтинг', fontsize=13)
plt.ylabel('Категория',fontsize=13)
plt.xlim(3,5)
sns.despine()

Вывод:

Распределение усредненных рейтингов по категориям отличается несильно, во всех категориях есть заведения с очень низким рейтингом, а средний рейтинг расположен в диапазоне 4.20-4.40, выше рейтинг у баров(пабов) - 4.4, самый низкий у быстрого питания и кафе - 4.2

Фоновая картограмма (хороплет) со средним рейтингом заведений каждого округа.

Границы районов Москвы, которые встречаются в датасете, хранятся в файле admin_level_geomap.geojson

In [37]:
# посчитаем средний рейтинг для каждого округа
rating_df = moscow_places.groupby('district', as_index=False)['rating'].agg('median')
In [38]:
# импортируем хороплет
moscow_lat, moscow_lng = 55.751244, 37.618423
# создаём объект m – карту с центром в точке с координатами [moscow_lat, moscow_lng]
m = Map(location=[moscow_lat, moscow_lng])

# загружаем JSON-файл с границами округов Москвы
state_geo = 'https://code.s3.yandex.net/data-analyst/admin_level_geomap.geojson'

# создаём хороплет с помощью конструктора Choropleth и добавляем его на карту
Choropleth(
    geo_data=state_geo,
    data=rating_df,
    columns=['district', 'rating'],
    key_on='feature.name',
    fill_color='YlGnBu',
    fill_opacity=0.8,
    legend_name='Медианный рейтинг заведений по округам',
).add_to(m)

# выводим карту
m
Out[38]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Вывод:

Максимальный средний рейтинг заведений в ЦАО -4.4, минимальный - Юго-восточный и Северо-Восточный округа - 4.2.

ЦАО популярен, так как в нем много туристических мест, а также адмиистративных заведений. Также в ЦАО расположено много дорогих заведений , которые следят за своей маркой. Иметь плохой рейтинг себе дороже, так как конкуренция большая, аренда высокая.

Отобразим все заведения датасета на карте с помощью кластеров средствами библиотеки folium.

In [39]:
# moscow_lat - широта центра Москвы, moscow_lng - долгота центра Москвы
moscow_lat, moscow_lng = 55.751244, 37.618423
# создаём объект m – карту с центром в точке с координатами [moscow_lat, moscow_lng]
m = Map(location=[moscow_lat, moscow_lng])
# выводим карту
# создаём пустой кластер, добавляем его на карту
marker_cluster = MarkerCluster().add_to(m)

# пишем функцию, которая принимает строку датафрейма,
# создаёт маркер в текущей точке и добавляет его в кластер marker_cluster
def create_clusters(row):
    Marker(
        [row['lat'], row['lng']],
        popup=f"{row['name']} {row['rating']}",
    ).add_to(marker_cluster)

# применяем функцию create_clusters() к каждой строке датафрейма
moscow_places.apply(create_clusters, axis=1)

# выводим карту
m
Out[39]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Топ-15 улиц по количеству заведений.

Построим график распределения количества заведений и их категорий по этим улицам.

In [40]:
top_15_street = moscow_places.groupby('street')['name'].count().sort_values(ascending=False).reset_index(name='count').head(15)
In [41]:
top_15_street
Out[41]:
street count
0 проспект Мира 183
1 Профсоюзная улица 122
2 проспект Вернадского 108
3 Ленинский проспект 107
4 Ленинградский проспект 95
5 Дмитровское шоссе 88
6 Каширское шоссе 77
7 Варшавское шоссе 76
8 Ленинградское шоссе 70
9 МКАД 65
10 Люблинская улица 60
11 улица Вавилова 55
12 Кутузовский проспект 54
13 улица Миклухо-Маклая 49
14 Пятницкая улица 48
In [42]:
top_15_street['count'].sum()
Out[42]:
1257
In [43]:
top_15_street_places = moscow_places.merge(top_15_street).sort_values(by='count',ascending=False)
In [44]:
distribution_category (top_15_street_places,'district','category','округ', 'Распределение  заведений на Топ-15 улиц по категориям и округам',False)
In [45]:
#распределение заведений на топ-15 улицах
m = Map(location=[moscow_lat, moscow_lng])
# выводим карту
# создаём пустой кластер, добавляем его на карту
marker_cluster = MarkerCluster().add_to(m)

# пишем функцию, которая принимает строку датафрейма,
# создаёт маркер в текущей точке и добавляет его в кластер marker_cluster
def create_clusters(row):
    Marker(
        [row['lat'], row['lng']],
        popup=f"{row['name']} {row['rating']}",
    ).add_to(marker_cluster)

# применяем функцию create_clusters() к каждой строке датафрейма
top_15_street_places.apply(create_clusters, axis=1)

# выводим карту
m
Out[45]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [46]:
distribution_category (top_15_street_places,'is_24/7','category','круглосуточное', 'Распределение заведений на ТОП-15 улиц по типу и режиму работы',False)

Вывод:

  • На топ-15 улиц приходится 1257 заведений
      183 находится на Проспекте Мира,122 на Профсоюзной, 108 на Проспекте Вернадского
  • Больше всего Топ-15 улиц расположены в Юго-Западном округе, Северном округе и Южном. В Восточном и Северо-Западном улиц из Топ-15 практически нет (в этих округах есть заведения, расположенные на МКАД)
  • Топ 15-улиц раскиданы по всей Москве. Можно отметить, что это крупные улицы города Москвы (шоссе, проспекты), поэтому на них и много заведений.
  • На Топ-15 расположены заведения всех категорий

Улицы, на которых находится только один объект общепита.

In [47]:
### список улиц с одним заведением общественного питания
one_place_street = moscow_places.groupby('street')['name'].count().reset_index(name='count').query('count==1')['street'].to_list()
In [48]:
print('Всего заведений, которые являются единственными на улице:', len(one_place_street))
Всего заведений, которые являются единственными на улице: 458
In [49]:
moscow_places_one_place_street=moscow_places.query('street in @one_place_street')
In [50]:
#распределение заведений единственных на улицах
m = Map(location=[moscow_lat, moscow_lng])
# выводим карту
# создаём пустой кластер, добавляем его на карту
marker_cluster = MarkerCluster().add_to(m)

# пишем функцию, которая принимает строку датафрейма,
# создаёт маркер в текущей точке и добавляет его в кластер marker_cluster
def create_clusters(row):
    Marker(
        [row['lat'], row['lng']],
        popup=f"{row['name']} {row['rating']}",
    ).add_to(marker_cluster)

# применяем функцию create_clusters() к каждой строке датафрейма
moscow_places_one_place_street.apply(create_clusters, axis=1)

# выводим карту
m
Out[50]:
Make this Notebook Trusted to load map: File -> Trust Notebook
In [51]:
distribution_category (moscow_places_one_place_street,'district','category','округ', 'Распределение единственных заведений на улице по категориям и округам',False)

Единственных заведений много в ЦАО, это объясняется наличием множества проулков, переулков и небольших улиц в этом округе

In [52]:
distribution_category (moscow_places_one_place_street,'is_24/7','category','круглосуточное', 'Распределение единственных заведений на улице по категориям и режиму работы',False)

Единственные на улице заведения работают в основном не круглосуточно, круглосуточно работают кафе(13), рестораны (9)

In [53]:
df_grouped = df_grouped=moscow_places_one_place_street.groupby('category').median().sort_values(by='rating')
plt.figure(figsize=(10, 10))
plt.title('Распределение средних рейтингов по категориям заведений,единственных на улице',fontsize=15)  
ax = sns.boxplot(x='rating',y='category', data=moscow_places_one_place_street, orient='h',order=df_grouped.index);
plt.xlabel('Рейтинг', fontsize=13)
plt.ylabel('Категория',fontsize=13)
plt.xlim(3,5)
sns.despine()
In [54]:
df_grouped['rating']
Out[54]:
category
кафе               4.20
быстрое питание    4.30
кофейня            4.30
пиццерия           4.30
ресторан           4.30
столовая           4.30
булочная           4.35
бар,паб            4.50
Name: rating, dtype: float64

Медианные рейтинги единственных на улице заведений категории бар,паб (4.5) и булочная (4.35) выше, чем у Топ-15 сетевых заведений

Вывод:

Всего заведений, которые являются единственными на улице: 458. Таких заведений много в ЦАО, это объясняется наличием множества проулков, переулков и небольших улиц в этом округе. В основном они работают не круглосуточно, круглосуточно работают 13 кафе и 9 ресторанов. Рейтинги единственных на улице заведений от 4.2 до 4.50. Высокий рейтинг у заведения категории бар,паб (4.5) и булочная (4.35). Рейтинг выше, чем у Топ-15 сетевых заведений

Построим ценовой индикатор района (по среднему чеку).

In [55]:
# посчитаем средний чек для каждого округа
middle_avg_bill_df = moscow_places.groupby('district', as_index=False)['middle_avg_bill'].agg('median').sort_values(by='middle_avg_bill')
In [56]:
middle_avg_bill_df
Out[56]:
district middle_avg_bill
6 Юго-Восточный административный округ 450.00
3 Северо-Восточный административный округ 500.00
8 Южный административный округ 500.00
0 Восточный административный округ 575.00
7 Юго-Западный административный округ 600.00
2 Северный административный округ 650.00
4 Северо-Западный административный округ 700.00
1 Западный административный округ 1000.00
5 Центральный административный округ 1000.00
In [57]:
m = Map(location=[moscow_lat, moscow_lng])

# создаём хороплет с помощью конструктора Choropleth и добавляем его на карту
Choropleth(
    geo_data=state_geo,
    data=middle_avg_bill_df,
    columns=['district', 'middle_avg_bill'],
    key_on='feature.name',
    fill_color='YlGnBu',
    fill_opacity=0.8,
    legend_name='Средний чек заведений по округам',
).add_to(m)

# выводим карту
m
Out[57]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Вывод:

Максимальный средний чек в ЦАО и ЗАО, можно отметить, что в этих округах и самые высокие рейтинги заведений общественного питания. И наоборот, самый низкий чек в округах, где был отмечен самый низкий рейтинг - ЮВАО (450 рублей), СВАО (500 руб) и ЮАО(500 руб.)

Вывод:

  • Самые популярные типы заведений - кафе (2377 заведений) и ресторан (2042), кофейни на третьем месте.
  • Менее популярные - булочная (256) и столовая (315)
  • Количество посадочных мест в среднем (медианное) от 50 для булочной до 86 посадочных мест для ресторана.
  • Сетевых заведений 3203, несетевых - 5200. Несетевых на 40% больше,чем сетевых

  • Топ-15 сетей: 'БУХАНКА', 'ДОДО ПИЦЦА', "ДОМИНО'С ПИЦЦА", 'COFEFEST', 'COFIX', 'МУ-МУ', 'ТЕРЕМОК', 'ЧАЙХАНА', 'ХИНКАЛЬНАЯ', 'ONE PRICE COFFEE', 'ШОКОЛАДНИЦА', 'ЯНДЕКС ЛАВКА', 'КОФЕПОРТ', 'PRIME', 'КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ. 5 из них относятся к кофейням.

  • Самые популярные сети - Шоколадница (120 заведений в Москве), "ДОМИНО'С ПИЦЦА" (76 заведений), ДОДо Пицца (74 заведения)
  • Самые популярные категории сетей - кофейни (337 заведений). рестораны (188) и пиццерии (152). В сетях не популярна категория - столовая и бар.паб
  • заведения из Топ-15 сетей объединяет высокий медианный рейтинг
  • В данных представлены 9 округов города Москвы (отсутствуют данные по "Зеленограду" и "Новой Москве"), больше всего заведений (2242) расположены в Центральном административном округе.
  • Самый популярный тип заведения в ЦАО -ресторан, кафе, кофейня.
  • Меньше всего заведений - в Северо-Западном административном округе (СЗАО) - 409. Наиболее распространены - кафе, ресторан, кофейня
  • Распределение усредненных рейтингов по категориям отличается несильно, во всех категориях есть заведения с очень низким рейтингом, а средний рейтинг расположен в диапазоне 4.20-4.40, выше рейтинг у баров(пабов) - 4.4, самый низкий у быстрого питания и кафе - 4.2
  • Максимальный средний рейтинг заведений в ЦАО -4.4, минимальный - Юго-восточный и Северо-Восточный округа - 4.2
  • На топ-15 улиц приходится 1257 заведений:
    • 183 находится на Проспекте Мира,122 на Профсоюзной, 108 на Проспекте Вернадского
  • Топ 15-улиц раскиданы по всей Москве. Можно отметить, что это крупные улицы города Москвы, поэтому на них и много заведений.
  • Максимальный средний чек в ЦАО и ЗАО, можно отметить, что в этих округах и самые высокие рейтинги заведений общественного питания. И наоборот, самый низкий чек в округах, где был отмечен самый низкий рейтинг - ЮВАО (450 рублей), СВАО (500 руб) и ЮАО(500 руб.)
  • 458 заведений являются единственным заведением на улице. В основном эти заведения расположены в ЦАО, работают не круглосуточно

Детализация исследования: открытие кофейни

Основателям фонда «Shut Up and Take My Money» не даёт покоя успех сериала «Друзья». Их мечта — открыть такую же крутую и доступную, как «Central Perk», кофейню в Москве. Будем считать, что заказчики не боятся конкуренции в этой сфере, ведь кофеен в больших городах уже достаточно. Попробуем определить, осуществима ли мечта клиентов. Ответим на следующие вопросы:

  • Сколько всего кофеен в датасете? В каких районах их больше всего, каковы особенности их расположения?
  • Есть ли круглосуточные кофейни?
  • Какие у кофеен рейтинги? Как они распределяются по районам?
  • На какую стоимость чашки капучино стоит ориентироваться при открытии и почему?

Сколько всего кофеен в датасете? Каковы особенности их расположения?

In [58]:
moscow_coffee_house = moscow_places.query('category=="кофейня"')
In [59]:
print('Всего кофеен в Москве:',moscow_coffee_house.name.count())
print('Кофеен, являющихся единственными на улице:', moscow_places_one_place_street.query('category=="кофейня"').name.count())
Всего кофеен в Москве: 1413
Кофеен, являющихся единственными на улице: 84
In [60]:
moscow_coffee_house.groupby('district')['name'].count().sort_values()
Out[60]:
district
Северо-Западный административный округ      62
Юго-Восточный административный округ        89
Юго-Западный административный округ         96
Восточный административный округ           105
Южный административный округ               131
Западный административный округ            150
Северо-Восточный административный округ    159
Северный административный округ            193
Центральный административный округ         428
Name: name, dtype: int64
In [61]:
moscow_coffee_house.groupby('district')['name'].count().sort_values(ascending=False).plot(kind='bar', xlabel='округ',ylabel='количество заведений',figsize=(10,6))
plt.xticks(rotation=30)
plt.title('Распределение кофеен по округам');

Всего в Москве 1413 кофеен, из них 428 расположено в ЦАО, что в 2 раза больше, чем в других округах

In [62]:
moscow_coffee_house.groupby('district')['name'].count().sort_values().reset_index()
Out[62]:
district name
0 Северо-Западный административный округ 62
1 Юго-Восточный административный округ 89
2 Юго-Западный административный округ 96
3 Восточный административный округ 105
4 Южный административный округ 131
5 Западный административный округ 150
6 Северо-Восточный административный округ 159
7 Северный административный округ 193
8 Центральный административный округ 428
In [63]:
fig = go.Figure()
fig.add_trace(go.Bar(name='Кофейни',
                     x=moscow_coffee_house.groupby('district')['name'].count().sort_values(ascending=False).reset_index()['district'],
                     y=moscow_coffee_house.groupby('district')['name'].count().sort_values(ascending=False).reset_index()['name'],
                     text=moscow_coffee_house.groupby('district')['name'].count().sort_values(ascending=False).reset_index()['name'],textposition='outside'))
fig.add_trace(go.Bar(name='Круглосуточные кофейни',
                     x=moscow_coffee_house.loc[moscow_coffee_house.loc[:,'is_24/7'] == True].groupby('district')['name'].count().sort_values(ascending=False).reset_index()['district'],
                     y=moscow_coffee_house.loc[moscow_coffee_house.loc[:,'is_24/7'] == True].groupby('district')['name'].count().sort_values(ascending=False).reset_index()['name'],
                     text=moscow_coffee_house.loc[moscow_coffee_house.loc[:,'is_24/7'] == True].groupby('district')['name'].count().sort_values(ascending=False).reset_index()['name'],textposition='outside'))
fig.update_layout(title='Распределение кофеен и круглосуточных кофеен по округам')
fig.show()

Есть ли круглосуточные кофейни?

In [64]:
distribution_category (moscow_coffee_house,'district','is_24/7','округ', 'Соотношение круглосуточных и не круглосуточных кофеен',False)

Круглосуточных кофеен мало, большинство (26) расположены в ЦАО, можно отменить, что в каждом округе имеется хотя бы одна круглосуточная кофейня

Какие у кофеен рейтинги? Как они распределяются по районам?

In [65]:
df_grouped=moscow_coffee_house.groupby('district').median().sort_values(by='rating')
df_grouped
Out[65]:
lat lng rating middle_avg_bill middle_coffee_cup seats is_24/7
district
Западный административный округ 55.73 37.49 4.20 600.00 189.00 96.00 0.00
Восточный административный округ 55.79 37.75 4.30 400.00 135.00 55.00 0.00
Северный административный округ 55.81 37.52 4.30 325.00 159.00 66.00 0.00
Северо-Восточный административный округ 55.84 37.62 4.30 325.00 162.50 75.00 0.00
Северо-Западный административный округ 55.80 37.46 4.30 325.00 165.00 87.50 0.00
Центральный административный округ 55.76 37.63 4.30 500.00 190.00 86.00 0.00
Юго-Восточный административный округ 55.71 37.73 4.30 250.00 147.50 50.00 0.00
Юго-Западный административный округ 55.67 37.55 4.30 375.00 198.00 64.50 0.00
Южный административный округ 55.65 37.64 4.30 387.50 150.00 80.00 0.00
In [66]:
plt.figure(figsize=(10, 10))
plt.title('Распределение средних рейтингов кофеен по округам',fontsize=15)  
ax = sns.boxplot(x='rating',y='district', data=moscow_coffee_house, orient='h',order=df_grouped.index);
plt.xlabel('Рейтинг', fontsize=13)
plt.ylabel('Округ',fontsize=13)
plt.xlim(3,5)
sns.despine()

Самый низкий рейтинг у кофеен ЗАО - 4.2, в остальных округах рейтинг одинаковый - 4.3, в САО самый большой размах рейтингов, тогда как в СЗАО самый маленький

На какую стоимость чашки капучино стоит ориентироваться при открытии и почему?

In [67]:
df_grouped=moscow_coffee_house.groupby('district').median().sort_values(by='middle_coffee_cup')
df_grouped
Out[67]:
lat lng rating middle_avg_bill middle_coffee_cup seats is_24/7
district
Восточный административный округ 55.79 37.75 4.30 400.00 135.00 55.00 0.00
Юго-Восточный административный округ 55.71 37.73 4.30 250.00 147.50 50.00 0.00
Южный административный округ 55.65 37.64 4.30 387.50 150.00 80.00 0.00
Северный административный округ 55.81 37.52 4.30 325.00 159.00 66.00 0.00
Северо-Восточный административный округ 55.84 37.62 4.30 325.00 162.50 75.00 0.00
Северо-Западный административный округ 55.80 37.46 4.30 325.00 165.00 87.50 0.00
Западный административный округ 55.73 37.49 4.20 600.00 189.00 96.00 0.00
Центральный административный округ 55.76 37.63 4.30 500.00 190.00 86.00 0.00
Юго-Западный административный округ 55.67 37.55 4.30 375.00 198.00 64.50 0.00
In [68]:
plt.figure(figsize=(10, 10))
plt.title('Распределение средней стоимости чашки капучино в кафейнях по округам',fontsize=15)  
ax = sns.boxplot(x='middle_coffee_cup',y='district', data=moscow_coffee_house, orient='h',order=df_grouped.index);
plt.xlabel('стоимость чашки капучино', fontsize=13)
plt.ylabel('Округ',fontsize=13)
plt.xlim(50,400)
sns.despine()

Дороже стоит чашка капучино в ЮЗАО, на втором месте по стоимости - ЦАО, самая маленькая цена - 135 - ВАО

In [69]:
# посчитаем среднюю стоимость чашки капучино для каждого округа
middle_coffee_cup_df = moscow_coffee_house.groupby('district', as_index=False)['middle_coffee_cup'].agg('median').sort_values(by='middle_coffee_cup')
In [70]:
m = Map(location=[moscow_lat, moscow_lng])

# создаём хороплет с помощью конструктора Choropleth и добавляем его на карту
Choropleth(
    geo_data=state_geo,
    data=middle_coffee_cup_df,
    columns=['district', 'middle_coffee_cup'],
    key_on='feature.name',
    fill_color='YlGnBu',
    fill_opacity=0.8,
    legend_name='Средняя стоимость чашки капучино по округам',
).add_to(m)

# выводим карту
m
Out[70]:
Make this Notebook Trusted to load map: File -> Trust Notebook

Вывод:

  • Меньше всего кофеен в СЗАО, больше всего - в ЦАО. Круглосуточных кофеен мало везде, но в каждом округе есть хотя бы одна.
  • Стоимость капучино колеблется от оруга к округу в среднем от 120 до 260 рублей. Минимальные цены на чашку в ВАО, максимальные - в ЗАО
  • При этом, средний рейтинг кофеен как раз в ЗАО самый низкий 4.2, в остальных округах рейтинг одинаковый - 4.3, в САО самый большой размах рейтингов, тогда как в СЗАО самый маленький. Скорее всего посетители более строги, так как за повышенную цену ждут улучшенного качества